Skip to main content

File Structure

Understanding the Student Web Portal project structure helps you navigate and modify the application effectively.

Project Structure Overview​

The Student Web Portal is built with Next.js 15, TypeScript, React 19, Redux Toolkit, and Tailwind CSS.

eschool-sass-web/
├── public/ # Static files served directly
│ ├── assets/ # Images and static resources
│ │ └── images/ # Application images
│ │ ├── aboutus/ # About us section images
│ │ ├── common/ # Common images (logo, user avatar)
│ │ ├── dashboard/ # Dashboard images
│ │ └── hero/ # Hero section images
│ ├── firebase-messaging-sw.js # Firebase service worker for push notifications
│ └── *.svg # SVG icons
├── src/ # Source code
│ ├── app/ # Next.js App Router
│ │ ├── (auth)/ # Auth route group
│ │ │ └── student/ # Student authentication
│ │ │ └── auth/ # Auth pages
│ │ │ ├── login/ # Login page
│ │ │ └── reset-password/ # Password reset
│ │ ├── (dashboard)/ # Dashboard route group
│ │ │ └── student/ # Student dashboard
│ │ │ ├── dashboard/ # Main dashboard
│ │ │ ├── assignments/ # Assignments page
│ │ │ ├── chats/ # Chat feature
│ │ │ ├── diary/ # Student diary
│ │ │ ├── exams/ # Exams (online & offline)
│ │ │ ├── gallery/ # Photo gallery
│ │ │ ├── guardian/ # Guardian information
│ │ │ ├── holiday/ # Holiday list
│ │ │ ├── noticeboard/ # Notice board
│ │ │ ├── notifications/ # Notifications
│ │ │ ├── profile/ # Student profile
│ │ │ ├── report/ # Academic reports
│ │ │ ├── result/ # Exam results
│ │ │ ├── subjects/ # Subjects and lessons
│ │ │ ├── teachers/ # Teachers list
│ │ │ ├── timetable/ # Class timetable
│ │ │ ├── transportation/ # Transportation info
│ │ │ └── layout.tsx # Dashboard layout
│ │ ├── globals.css # Global styles
│ │ ├── layout.tsx # Root layout
│ │ └── page.tsx # Home page
│ ├── components/ # React components
│ │ ├── chat/ # Chat components
│ │ ├── contexts/ # React contexts
│ │ ├── features/ # Feature-specific components
│ │ │ └── student/ # Student features
│ │ │ └── auth/ # Auth components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── lib/ # Library utilities
│ │ │ ├── api.ts # API client
│ │ │ ├── auth.ts # Auth utilities
│ │ │ ├── queryClient.ts # React Query client
│ │ │ └── utils.ts # Common utilities
│ │ ├── providers/ # React providers
│ │ ├── shared/ # Shared components
│ │ │ ├── common/ # Common UI components
│ │ │ ├── container/ # Layout container
│ │ │ └── layout/ # Layout components
│ │ ├── store/ # Redux store
│ │ │ ├── slices/ # Redux slices
│ │ │ │ ├── examSlice.ts # Exam state
│ │ │ │ ├── languageSlice.ts # Language state
│ │ │ │ └── studentAuthSlice.ts # Auth state
│ │ │ ├── index.ts # Store configuration
│ │ │ └── ReduxProvider.tsx # Redux provider
│ │ └── ui/ # UI components (shadcn/ui)
│ │ ├── button.tsx # Button component
│ │ ├── card.tsx # Card component
│ │ ├── dialog.tsx # Dialog/Modal component
│ │ ├── input.tsx # Input component
│ │ └── pages/ # Page-specific components
│ │ ├── common/ # Common page components
│ │ ├── dashboard/ # Dashboard components
│ │ └── home/ # Home page components
│ └── lib/ # Library code
│ ├── api/ # API integration
│ │ └── student/ # Student API
│ │ ├── axiosConfig.ts # Axios configuration
│ │ ├── endpoints.ts # API endpoints
│ │ ├── functions.ts # API functions
│ │ ├── queryHooks.ts # React Query hooks
│ │ └── responseHandler.ts # Response handling
│ ├── firebase/ # Firebase configuration
│ │ ├── firebaseConfig.ts # Firebase setup
│ │ ├── NotificationContext.tsx # Notification context
│ │ └── useFCMToken.ts # FCM token hook
│ ├── student/ # Student-specific code
│ │ └── translations/ # Translation files
│ │ ├── en.json # English
│ │ ├── hi.json # Hindi
│ │ └── ar.json # Arabic
│ ├── langConfig.ts # Language configuration
│ └── utils.ts # Utility functions
├── docs/ # Project documentation
│ ├── API_STRUCTURE.md # API structure guide
│ ├── FIREBASE_CONFIG_SETUP.md # Firebase setup
│ ├── FEATURE_FLAGS_DOCUMENTATION.md # Feature flags
│ └── [other feature docs] # Feature-specific docs
├── .env.local # Environment variables
├── .gitignore # Git ignore rules
├── .prettierrc # Prettier configuration
├── components.json # shadcn/ui configuration
├── eslint.config.mjs # ESLint configuration
├── next.config.ts # Next.js configuration
├── package.json # Dependencies and scripts
├── postcss.config.mjs # PostCSS configuration
├── tailwind.config.js # Tailwind CSS configuration
├── tsconfig.json # TypeScript configuration
└── README.md # Project documentation

Key Directories​

/public​

Contains static assets that are served directly without processing.

  • assets/images/ - All application images (logos, banners, icons)
  • firebase-messaging-sw.js - Service worker for Firebase push notifications
  • SVG icons and other static files

/src/app​

Next.js App Router with file-based routing.

  • (auth)/ - Route group for authentication pages (login, password reset)
  • (dashboard)/ - Route group for authenticated student pages
  • layout.tsx - Defines the layout structure for routes
  • page.tsx - Page components for each route
  • Uses Next.js 15 App Router conventions

/src/components​

Organized React components by functionality.

/components/chat/​

  • Chat interface components
  • Message bubbles, chat sidebar, contact list

/components/hooks/​

  • Custom React hooks for reusable logic
  • useLanguage.ts - Multi-language support
  • useOnlineStatus.ts - Network connectivity detection
  • useTranslate.ts - Translation utilities
  • useElectiveSubjects.ts - Elective subjects management

/components/lib/​

  • Core library utilities
  • api.ts - Axios API client configuration
  • auth.ts - Authentication utilities
  • queryClient.ts - React Query configuration
  • toast.ts - Toast notification utilities

/components/providers/​

  • React context providers
  • QueryProvider.tsx - React Query provider
  • OnlineStatusProvider.tsx - Online/offline status
  • ToastProvider.tsx - Toast notifications

/components/store/​

  • Redux Toolkit state management
  • slices/ - Redux slices for different features
    • studentAuthSlice.ts - Authentication state
    • examSlice.ts - Exam-related state
    • languageSlice.ts - Language preferences
  • ReduxProvider.tsx - Redux provider wrapper

/components/ui/​

  • Reusable UI components (shadcn/ui)
  • Pre-built components like buttons, cards, dialogs, inputs
  • pages/ - Page-specific component collections

/src/lib​

Library code and integrations.

/lib/api/student/​

  • Complete API integration layer
  • axiosConfig.ts - Axios instance configuration
  • endpoints.ts - API endpoint definitions
  • functions.ts - API request functions
  • queryHooks.ts - React Query hooks for data fetching
  • responseHandler.ts - Centralized response handling
  • statusCodes.ts - HTTP status code handling

/lib/firebase/​

  • Firebase integration for push notifications
  • firebaseConfig.ts - Firebase initialization
  • NotificationContext.tsx - Notification state management
  • useFCMToken.ts - Firebase Cloud Messaging token management
  • notificationHelper.ts - Notification utilities

/lib/student/translations/​

  • Multi-language support files
  • en.json - English translations
  • hi.json - Hindi translations
  • ar.json - Arabic translations

/docs​

Comprehensive feature documentation.

  • API integration guides
  • Feature-specific documentation
  • Setup and configuration instructions
  • Git workflow guidelines

Important Files​

package.json​

Lists all dependencies and project scripts.

{
"scripts": {
"dev": "next dev --turbopack", // Start development server with Turbopack
"build": "next build --turbopack", // Build for production
"start": "next start", // Start production server
"lint": "eslint" // Run ESLint
},
"dependencies": {
"next": "^15.5.9", // Next.js framework
"react": "^19.2.3", // React library
"react-dom": "^19.2.3", // React DOM
"@reduxjs/toolkit": "^2.11.2", // Redux state management
"@tanstack/react-query": "^5.90.12", // Data fetching
"axios": "^1.13.2", // HTTP client
"firebase": "^12.6.0", // Firebase integration
"tailwindcss": "^4.1.18" // Tailwind CSS
}
}

.env.local​

Environment variables for configuration (create from template).

# API Configuration
NEXT_PUBLIC_API_URL=https://your-admin-panel-api.com/api/v1
NEXT_PUBLIC_API_VERSION=v1

# Firebase Configuration
NEXT_PUBLIC_FIREBASE_API_KEY=your-firebase-api-key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-app.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project-id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-app.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your-sender-id
NEXT_PUBLIC_FIREBASE_APP_ID=your-app-id
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=your-measurement-id
NEXT_PUBLIC_FIREBASE_VAPID_KEY=your-vapid-key

# App Configuration
NEXT_PUBLIC_APP_NAME=eSchool Student Portal

next.config.ts​

Next.js configuration file.

  • Configures routing, images, environment variables
  • Optimizations and build settings

tailwind.config.js​

Tailwind CSS configuration.

  • Custom colors, fonts, and theme settings
  • Plugin configurations

tsconfig.json​

TypeScript configuration.

  • Compiler options
  • Path aliases
  • Type checking rules

src/app/layout.tsx​

Root layout component - wraps all pages.

  • Defines global layout structure
  • Includes providers (Redux, React Query, Toast)
  • Global metadata and HTML structure

src/app/page.tsx​

Home page component (landing page).

File Naming Conventions​

  • Pages: page.tsx (Next.js App Router convention)
  • Layouts: layout.tsx (Next.js App Router convention)
  • Components: PascalCase (e.g., StudentCard.tsx)
  • Hooks: camelCase with use prefix (e.g., useLanguage.ts)
  • Utilities: camelCase (e.g., utils.ts)
  • Types: PascalCase (e.g., StudentTypes.ts)
  • API Files: camelCase (e.g., endpoints.ts)
  • Redux Slices: camelCase with Slice suffix (e.g., studentAuthSlice.ts)

Technology Stack​

  • Framework: Next.js 15 (App Router)
  • Language: TypeScript
  • UI Library: React 19
  • Styling: Tailwind CSS 4
  • State Management: Redux Toolkit
  • Data Fetching: React Query (TanStack Query)
  • HTTP Client: Axios
  • UI Components: shadcn/ui (Radix UI)
  • Notifications: Firebase Cloud Messaging
  • Icons: Lucide React, React Icons
  • Charts: Recharts
  • Date Handling: date-fns
  • PDF Generation: jsPDF

Routing Structure​

Next.js App Router uses file-based routing:

  • (auth)/ - Route group (doesn't affect URL path)
  • student/ - URL segment: /student
  • page.tsx - Creates a route page
  • layout.tsx - Shared layout for routes
  • [id]/ - Dynamic route segment: /student/[id]
  • [[...slug]]/ - Optional catch-all route

Best Practices​

  1. Component Organization: Keep components small and focused on a single responsibility
  2. TypeScript: Use proper typing for props, state, and API responses
  3. API Layer: All API calls go through /lib/api/student/ with React Query hooks
  4. State Management:
    • Use Redux for global state (auth, language, exams)
    • Use React Query for server state (API data)
    • Use React Context for UI state
  5. Styling: Use Tailwind CSS utility classes, avoid inline styles
  6. File Structure: Follow Next.js App Router conventions
  7. Error Handling: Centralized error handling in responseHandler.ts
  8. Translations: Use the translation system for all user-facing text
  9. Performance:
    • Use Next.js Image component for images
    • Implement proper loading states
    • Use React Query caching effectively
  10. Security:
    • Never expose sensitive keys in client-side code
    • Use environment variables with NEXT_PUBLIC_ prefix for client-side values